#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
时尚趋势预测系统启动脚本
"""
import argparse
import logging
import os
from logging.handlers import RotatingFileHandler

from dotenv import load_dotenv
from flask import Flask

from config import config
from routes import api_bp

# 加载环境变量
load_dotenv()


def create_app():
    app = Flask(__name__)

    # 加载配置
    app.config.from_object(config)

    # 确保必要的目录存在
    os.makedirs(config.DATA_DIR, exist_ok=True)
    os.makedirs(config.MODELS_DIR, exist_ok=True)
    os.makedirs(config.TEMP_FOLDER, exist_ok=True)

    # 配置日志
    configure_logging(app)
    app.register_blueprint(api_bp)

    return app


def configure_logging(app):
    """配置日志系统

    参数:
        app (Flask): Flask应用实例
    """
    if not app.debug and not app.testing:
        # 创建日志目录
        log_dir = os.path.join(app.config['BASE_DIR'], 'logs')
        os.makedirs(log_dir, exist_ok=True)

        # 设置文件处理器
        file_handler = RotatingFileHandler(
            os.path.join(log_dir, 'cnn.log'),
            maxBytes=10485760,  # 10MB
            backupCount=10
        )
        file_handler.setFormatter(logging.Formatter(
            '%(asctime)s %(levelname)s: %(message)s '
            '[in %(pathname)s:%(lineno)d]'
        ))
        file_handler.setLevel(logging.INFO)

        # 添加到应用和根日志器
        app.logger.addHandler(file_handler)
        app.logger.setLevel(logging.INFO)

        # 设置Werkzeug日志
        werkzeug_logger = logging.getLogger('werkzeug')
        werkzeug_logger.addHandler(file_handler)

        app.logger.info('应用启动')


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='启动时尚趋势预测系统')
    parser.add_argument('--host', type=str, default='0.0.0.0',
                        help='监听的主机地址（默认: 0.0.0.0）')
    parser.add_argument('--port', type=int, default=5000,
                        help='监听的端口（默认: 5000）')
    parser.add_argument('--debug', action='store_true',
                        help='开启调试模式')
    parser.add_argument('--config', type=str, choices=['development', 'production', 'testing'],
                        default=None, help='配置环境')
    args = parser.parse_args()

    # 创建Flask应用
    app = create_app()

    # 如果命令行指定了debug模式，覆盖配置
    if args.debug:
        app.config['DEBUG'] = True

    # 启动应用
    app.run(host=args.host, port=args.port)
